unit u_grafik_main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, u_Auto, u_Tanke, jpeg, XPMan, ComCtrls; //Eigene Units werden ergänzt

type
  Tf_oop_Grafik = class(TForm)
    gb_Rennbahn: TGroupBox;
    i_Leinwand_2: TImage;
    gb_Steuerung: TGroupBox;
    i_Lenkrad: TImage;
    t_spiel: TTimer;
    gb_Optionen: TGroupBox;
    cb_Zeitstrafe: TCheckBox;
    GroupBox1: TGroupBox;
    Label1: TLabel;
    e_Zeit: TEdit;
    e_Punkte: TEdit;
    Label2: TLabel;
    Label3: TLabel;
    e_Speed: TEdit;
    XPManifest1: TXPManifest;
    e_Strecke: TEdit;
    Label5: TLabel;
    b_MachPunkt: TButton;
    Label4: TLabel;
    pb_Zustand: TProgressBar;
    pb_Speed: TProgressBar;
    Label6: TLabel;
    b_Ende: TButton;
    l_Funk: TLabel;
    l_gang: TLabel;
    pb_Tank: TProgressBar;
    Label7: TLabel;
    procedure b_EndeClick(Sender: TObject);
    procedure cb_ZeitstrafeClick(Sender: TObject);
    procedure i_LenkradDblClick(Sender: TObject);
    procedure i_LenkradMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);

    procedure b_MachPunktClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure t_spielTimer(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  f_oop_Grafik: Tf_oop_Grafik;
  meinAuto : T_Auto;
  dieTanke : T_Tanke;
  Funk : array[1..20] of string;

implementation

{$R *.dfm}


procedure Tf_oop_Grafik.FormCreate(Sender: TObject);
begin
   i_Leinwand_2.Canvas.Pen.Mode := pmNotXor;

   Funk[1] := 'Auf geht''s!';
   Funk[2] := 'Fahr schneller, du Schnecke!';
   Funk[3] := 'Brauchst du Red-Bull?';
   Funk[4] := 'Sehr gut, weiter so...';
   Funk[5] := 'Pass auf deine Reifen auf!';
   Funk[6] := 'Achtung, Hindernis!';
   Funk[7] := 'Nicht so schnell!';
   Funk[8] := 'Pass auf die Ränder auf!';
   Funk[8] := 'Hast du Kleber an den Reifen?';
   Funk[10] := 'Ja, gut gemacht!';
   Funk[11] := 'Hey, du bist ein 2. Vettel!';

end;

procedure Tf_oop_Grafik.b_MachPunktClick(Sender: TObject);
begin
    i_Leinwand_2.Canvas.Pen.Mode := pmCopy;

    i_Leinwand_2.Canvas.Brush.Color:= clWhite;
    i_Leinwand_2.Canvas.Rectangle(0,0,i_Leinwand_2.Width,i_Leinwand_2.Height);

  i_Leinwand_2.Canvas.Pen.Mode := pmNotXor;

  if meinAuto <> NIL  then
     meinAuto.NeuStart
  else
  begin
     meinAuto := T_Auto.Create(10,10,20,20,i_Leinwand_2);
     meinAuto.Visible(true);
  end;

end;



procedure Tf_oop_Grafik.i_LenkradMouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
{   if Shift = [ssCtrl] then
      edit1.Text := 'Ctrl gedrückt'
   else
     edit1.Text := 'Ctrl nicht gedrückt';}

   if meinAuto <> NIL then
      meinAuto.Lenken(x,y);
end;

procedure Tf_oop_Grafik.i_LenkradDblClick(Sender: TObject);
begin
   if meinAuto <> NIL then
   begin
      meinAuto.Start;

      dieTanke := T_Tanke.Create(100+random(50),100+random(50),i_Leinwand_2);
      dieTanke.Visible(true);

      t_spiel.Enabled := true;
   end;
end;

procedure Tf_oop_Grafik.t_spielTimer(Sender: TObject);
begin
   if MeinAuto <> NIL then
   begin
      e_zeit.Text := IntToStr(meinAuto.GibZeit);

      e_Speed.Text := IntToStr(meinAuto.GibSpeed) + ' km/h';

      l_Gang.Caption := 'Gang: ' + IntToStr(meinAuto.GibGang);

      e_Punkte.Text := IntToStr(meinAuto.GibPunkte);

      e_Strecke.Text := IntToStr(meinAuto.GibStrecke) + ' m';

      pb_Zustand.Position := 100 - meinAuto.GibDefekt;
      pb_Speed.Position := meinAuto.GibSpeed;
      //if (meinAuto.GibStatus > 0)
      pb_Tank.Position := meinAuto.GibZeit;

      if dieTanke.InRechteck(meinAuto.GibGroesse(1),meinAuto.GibGroesse(2),meinAuto.GibGroesse(3), meinAuto.GibGroesse(4)) = true then
      begin
        meinAuto.SetzZeit(meinAuto.GibZeit + 2);
        dieTanke.SetPos(50 + random(150),50 + random(200));
        dieTanke.SetzKosten(dieTanke.Kosten + 1);
      end;

      if dieTanke.Kosten > 15 then
      begin
      dieTanke.Visible(false);
      dieTanke.FreeInstance;
      end;

      if Random(100) < 10 then
         l_Funk.Caption := Funk[Random(11)+1];

      if meinAuto.GibZeit <= 0 then
      begin
         t_Spiel.Enabled := false;

         if meinAuto.GibStoppGrund = 5 then
            l_Funk.Caption := 'Gewonnen !!!!!'
         else
            l_Funk.Caption := 'Leider verloren!'
       end;
   end;
end;



procedure Tf_oop_Grafik.cb_ZeitstrafeClick(Sender: TObject);
begin
   if MeinAuto <> NIL then
      meinAuto.SetzStrafe(cb_Zeitstrafe.Enabled);
end;

procedure Tf_oop_Grafik.b_EndeClick(Sender: TObject);
begin
   Halt;
end;

end.
